<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="rLRnY" id="rLRnY"><span data-lake-id="u32c4877c" id="u32c4877c">典型回答</span></h1>
  <p data-lake-id="uc7accf1d" id="uc7accf1d"><br></p>
  <p data-lake-id="u4e1deb0c" id="u4e1deb0c"><span data-lake-id="u37715975" id="u37715975">我们应该都知道，计算机在执行程序的时候，每条指令都是在CPU中执行的，而执行的时候，又免不了要和数据打交道。而计算机上面的数据，是存放在主存当中的，也就是计算机的物理内存啦。</span></p>
  <p data-lake-id="ubbfeb402" id="ubbfeb402"><br></p>
  <p data-lake-id="u4c75e40f" id="u4c75e40f"><span data-lake-id="u166325c9" id="u166325c9">刚开始，还相安无事的，但是随着CPU技术的发展，CPU的执行速度越来越快。而由于内存的技术并没有太大的变化，所以从内存中读取和写入数据的过程和CPU的执行速度比起来差距就会越来越大,这就导致CPU每次操作内存都要耗费很多等待时间。</span></p>
  <p data-lake-id="u3968a92d" id="u3968a92d"><br></p>
  <p data-lake-id="ub7e165e0" id="ub7e165e0"><span data-lake-id="u60e1623e" id="u60e1623e">可是，不能因为内存的读写速度慢，就不发展CPU技术了吧，总不能让内存成为计算机处理的瓶颈吧。</span></p>
  <p data-lake-id="u266c8b98" id="u266c8b98"><br></p>
  <p data-lake-id="u394f0285" id="u394f0285"><span data-lake-id="ufef51ae5" id="ufef51ae5">所以，人们想出来了一个好的办法，就是在CPU和内存之间增加高速缓存。缓存的概念大家都知道，就是保存一份数据拷贝。他的特点是速度快，内存小，并且昂贵。</span></p>
  <p data-lake-id="u3e6a918a" id="u3e6a918a"><br></p>
  <p data-lake-id="ub94c2d76" id="ub94c2d76"><span data-lake-id="u69a4a075" id="u69a4a075">那么，程序的执行过程就变成了：</span></p>
  <p data-lake-id="u03f4a7f7" id="u03f4a7f7"><br></p>
  <p data-lake-id="uc29f68d1" id="uc29f68d1"><strong><span data-lake-id="u3c698612" id="u3c698612">当程序在运行过程中，会将运算需要的数据从主存复制一份到CPU的高速缓存当中，那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据，当运算结束之后，再将高速缓存中的数据刷新到主存当中。</span></strong></p>
  <p data-lake-id="ub58210b4" id="ub58210b4"><br></p>
  <p data-lake-id="uc95a89ff" id="uc95a89ff"><span data-lake-id="uada9bca8" id="uada9bca8">而随着CPU能力的不断提升，一层缓存就慢慢的无法满足要求了，就逐渐的衍生出多级缓存。</span></p>
  <p data-lake-id="u0878e173" id="u0878e173"><br></p>
  <p data-lake-id="u551e6e7c" id="u551e6e7c"><span data-lake-id="uf3ea080e" id="uf3ea080e">按照数据读取顺序和与CPU结合的紧密程度，CPU缓存可以分为一级缓存（L1），二级缓存（L2），部分高端CPU还具有三级缓存（L3），每一级缓存中所储存的全部数据都是下一级缓存的一部分。</span></p>
  <p data-lake-id="u4b5692c8" id="u4b5692c8"><br></p>
  <p data-lake-id="u0c5e51c7" id="u0c5e51c7"><span data-lake-id="u25a29d41" id="u25a29d41">这三种缓存的技术难度和制造成本是相对递减的，所以其容量也是相对递增的。</span></p>
  <p data-lake-id="ue33f40bd" id="ue33f40bd"><br></p>
  <p data-lake-id="u7be3877a" id="u7be3877a"><span data-lake-id="u8f58079d" id="u8f58079d">那么，在有了多级缓存之后，程序的执行就变成了：</span></p>
  <p data-lake-id="ude5834b6" id="ude5834b6"><br></p>
  <p data-lake-id="uf6926435" id="uf6926435"><strong><span data-lake-id="u58ac92de" id="u58ac92de">当CPU要读取一个数据时，首先从一级缓存中查找，如果没有找到再从二级缓存中查找，如果还是没有就从三级缓存或内存中查找。</span></strong></p>
  <p data-lake-id="u58bcd77a" id="u58bcd77a"><br></p>
  <p data-lake-id="u0ca8c287" id="u0ca8c287"><span data-lake-id="uf2e70bb8" id="uf2e70bb8">单核CPU只含有一套L1，L2，L3缓存；如果CPU含有多个核心，即多核CPU，则每个核心都含有一套L1（甚至和L2）缓存，而共享L3（或者和L2）缓存。</span></p>
  <p data-lake-id="u4c0750cf" id="u4c0750cf"><br></p>
  <p data-lake-id="u9e0b9f09" id="u9e0b9f09"><span data-lake-id="u7a5d0386" id="u7a5d0386">下图为一个单CPU双核的缓存结构。</span></p>
  <p data-lake-id="ucacdf0d0" id="ucacdf0d0"><br></p>
  <p data-lake-id="u5746cc8c" id="u5746cc8c"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1690096638833-5e304afe-598b-4860-9307-3880b29924aa.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_23%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u98211f11" id="u98211f11"><br></p>
  <p data-lake-id="ub02bfe0a" id="ub02bfe0a"><br></p>
 </body>
</html>